@using AntDesign.Internal
@using AntDesign.Select.Internal
@namespace AntDesign
@inherits AntInputComponentBase<TItemValue>
@typeparam TItemValue
@typeparam TItem

<CascadingValue Value="this" IsFixed="true">
    <CascadingValue Value=@("ant-select-dropdown") Name="PrefixCls">
        <div class="@ClassMapper.Class" style="@Style" id="@Id" tabindex="-1" @ref="Ref">
            <OverlayTrigger @ref="@_dropDown"
                            Visible="Open"
                            Disabled="Disabled"
                            Trigger="new[] { TriggerType.Click }"
                            HiddenMode
                            OnMouseEnter="@(() => { OnMouseEnter?.Invoke(); })"
                            OnMouseLeave="@(() => { OnMouseLeave?.Invoke(); })"
                            OnVisibleChange="@OnOverlayVisibleChangeAsync"
                            PopupContainerSelector="@PopupContainerSelector"
                            OverlayEnterCls="slide-up-enter slide-up-enter-active slide-up"
                            OverlayLeaveCls="slide-up-leave slide-up-leave-active slide-up">
                <Overlay>
                    <div style="@_dropdownStyle">
                        @if (SelectOptions != null) 
                        {
                            <div class="" style="max-height: @PopupContainerMaxHeight; overflow-y: auto;">
                                <div>
                                    <div class="" role="listbox" style="display: flex; flex-direction: column;">
                                        @SelectOptions
                                    </div>
                                </div>
                            </div>
                        }
                        else if (SelectOptions == null && DataSource != null)
                        {
                            <div class="" style="max-height: @PopupContainerMaxHeight; overflow-y: auto;">
                                <div>
                                    <div class="" role="listbox" style="display: flex; flex-direction: column;">
                                        @{
                                            @if (!IsGroupingEnabled)
                                            {
                                                foreach (var selectOption in SortedSelectOptionItems)
                                                {
                                                    <CascadingValue Value="@ItemTemplate" Name="ItemTemplate">
                                                        <CascadingValue Value="@selectOption.InternalId" Name="InternalId">
                                                            <SelectOption
                                                                @key="@selectOption.InternalId"
                                                                TItemValue="TItemValue"
                                                                TItem="TItem">
                                                            </SelectOption>
                                                        </CascadingValue>
                                                    </CascadingValue>
                                                }                                                                                               
                                            }
                                            else
                                            {
                                                <CascadingValue Value="@ItemTemplate" Name="ItemTemplate">
                                                    <SelectOptionGroup TItemValue="TItemValue" TItem="TItem"></SelectOptionGroup>
                                                </CascadingValue>
                                            }
                                        }
                                    </div>
                                </div>
                            </div>
                        }
                        @if (AllOptionsHidden())
                        {
                            <div role="listbox" id="@(Id)_list" class="@ClassPrefix-item-empty">
                                @if (NotFoundContent != null)
                                {
                                    @NotFoundContent
                                }
                                else
                                {
                                    <Empty Simple Small/>
                                }
                            </div>
                        } 

                        @if (DropdownRender != null)
                        {
                            @DropdownRender(default)
                        }
                    </div>                    
                </Overlay>
                <ChildContent>
                    <CascadingValue Value="this" Name=@("ParentSelect") IsFixed="true">
                        <CascadingValue Value="@LabelTemplate" Name="ParentLabelTemplate">
                            <CascadingValue Value="@ShowSearchIcon" Name="ShowSearchIcon">
                                <CascadingValue Value="@ShowArrowIcon" Name="ShowArrowIcon">
                                    <SelectContent Prefix="@ClassPrefix"
                                                   TItemValue="TItemValue"
                                                   TItem="TItem"
                                                   SearchValue="@_searchValue"
                                                   IsOverlayShow="@_dropDown.IsOverlayShow()"
                                                   OnInput="@OnInputAsync"
                                                   OnKeyUp="@OnKeyUpAsync"
                                                   OnKeyDown="@OnKeyDownAsync"
                                                   OnFocus="@OnInputFocusAsync"
                                                   OnBlur="@OnInputBlurAsync"
                                                   OnClearClick="@OnInputClearClickAsync"   
                                                   OnRemoveSelected="@OnRemoveSelectedAsync"
                                                   Placeholder="@Placeholder"
                                                   ShowPlaceholder="@ShowPlaceholder"/>
                                </CascadingValue>
                            </CascadingValue>
                        </CascadingValue>
                    </CascadingValue>
                </ChildContent>
            </OverlayTrigger>
        </div>
    </CascadingValue>
</CascadingValue>
